package com.sunwayhorizo.health.platform.security.dao;

import java.util.List;

import com.sunwayhorizo.health.platform.common.SecurityQueryConditions;
import com.sunwayhorizo.health.platform.security.persistent.SecurityAccount;

public interface SecurityAccountDao{
	
	/**
	 * 新增账号级联包含permissionAccounts,accRolePermissions,accountRoles,dataObjectAccounts
	 * @param account 实体
	 * @return 返回新增的实体
	 */
	SecurityAccount newSecurityAccount(SecurityAccount account);
	
	/**
	 * 批量删除账号级联包含permissionAccounts,accRolePermissions,accountRoles,dataObjectAccounts
	 * @param list 字符串List 
	 */
	void deleteSecurityAccount(List<String> list);
	
	/**
	 * 修改账号级联包含permissionAccounts,accRolePermissions,accountRoles,不包含dataObjectAccounts
	 * @param list 字符串List 
	 * @return 返回修改的实体
	 */
	SecurityAccount updateSecurityAccount(SecurityAccount account);
	
	/**
	 * 修改账号密码
	 * @param account 封装了页面参数的实体
	 */
	void updateSecurityAccountPassword(SecurityAccount account);
	
	/**
	 * 查询账号列表
	 * @return 返回查询的账号列表
	 */
	List<SecurityAccount> findSecurityAccountList();
	
	/**
	 * 根据账号Id查询账号详细信息
	 * @param accountId 实体Id
	 * @return 返回查询到的账号信息
	 */
	SecurityAccount findSecurityAccountDetailById(String accountId);
	
	/**
	 * 根据账号名称查询账号详细信息
	 * @param accountName 实体名称
	 * @return 返回查询到的账号信息
	 */
	SecurityAccount findSecurityAccountDetailByName(String accountName);
	
	/**
	 * 根据角色Id查询账号列表
	 * @param roleId 实体Id
	 * @return 返回查询到的账号列表
	 */
	List<SecurityAccount> findSecurityAccountListByRoleId(String roleId);
	
	/**
     * 根据角色Id查询账号列表
     * @param roleId 实体Id
     * @return 返回查询到的账号列表
     */
    List<SecurityAccount> findSecurityAccountListNotHasRole(String roleId);
    
	/**
	 * 根据页面条件查询账号列表
	 * @param account 封装了页面的所有条件
	 * @return 返回查询到的账号列表
	 */
	List<SecurityAccount> findSecurityAccountListByAccount(SecurityAccount account);
	
	/**
	 * 根据页面条件查询账号列表(带分页)
	 * @param currentPage 当前页面的页码
	 * @param pageSize	一页显示的数量
	 * @param account	封装了页面的所有条件
	 * @return 返回查询到的账号列表
	 */
	List<SecurityAccount> findSecurityAccountListByAccount(int startPosition,int pageSize,SecurityAccount account);
	
	/**
     * 根据页面条件查询账号列表
     * @param account 封装了页面的所有条件
     * @return 返回查询到的账号列表
     */
    List<SecurityAccount> findSecurityAccountListByQueryConditions(SecurityQueryConditions conditions);
    
    /**
     * 根据页面条件查询账号列表(带分页)
     * @param currentPage 当前页面的页码
     * @param pageSize  一页显示的数量
     * @param account   封装了页面的所有条件
     * @return 返回查询到的账号列表
     */
    List<SecurityAccount> findSecurityAccountListByQueryConditions(int startPosition,int pageSize,SecurityQueryConditions conditions);
	
	/**
	 * 批量启用停用账号列表
	 * @param list 字符串List
	 * @param flag 修改账号启用、停止的状态
	 */
	void enableOrUnableSecurityAccount(List<String> list,String flag);
	
	/**
	 * 验证账号合法性
	 * @param account
	 * @return
	 */
	SecurityAccount validateAccountLawful(SecurityAccount account);
	
	/**
     * 通过账号、密码查询到相关账号
     * @param account
     * @return
     */
    SecurityAccount findSecurityAccountByAccountNameAndPWD(SecurityAccount account);
    
	/**
     * 通过账号、无密码查询到相关账号，注意，无密码！
     * @param account
     * @return
     */
    SecurityAccount findSecurityAccountByAccountName(SecurityAccount account);
    
}
